<?php
declare (strict_types = 1);

namespace fortuna;
require_once('../extend/fortuna/Random.php');
class Auth
{
    // 超时时间，默认10分钟
    protected $timeout = 600;
    private $encrypt_type = 'md5';
    /**
     * 验证密码
     *
     * @param [string] $input_password 用户输入密码
     * @param [string] $db_password
     * @param [string] $salt
     * @return bool
     */
    public function verify_password($input_password, $db_password, $salt = ''): bool{
        $md5_password = $this->getMd5Password(trim($input_password),trim($salt));
        return $md5_password === trim($db_password);
    }
    /**
     * 生成加密密码字符串
     *
     * @param [string] $input_password
     * @return array
     */
    public function encrypt_password($input_password): array {
        $salt = \fortuna\Random::alnum();
        $password = $this->getMd5Password($input_password, $salt);
        return [$password, $salt];
    }
    /**
     * 生成字符串
     *
     * @param [type] $string 主键字符串
     * @return string
     */
    public function genrate_timeout_sercet($key_string = ''): string{
        return md5($key_string).'@'.base64_encode(time().'');
    }
    /**
     * 验证字符串
     *
     * @param [type] $sercet 密码字符串
     * @param string $key_string 主键字符串
     * @return boolean
     */
    public function verify_timeout_sercet($sercet,$key_string = ''): bool{
        $sercet_array = explode('@',$sercet);
        if (is_array($sercet_array) && sizeof($sercet_array) === 2) {
            if($sercet_array[0] === md5($key_string)) {
                if( time() <= (base64_decode($sercet_array[1]) + $this->timeout )){
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    // MD5加密密码
    private function getMd5Password($password, $salt = '')
    {
        return md5(md5(trim($password)) . $salt);
    }
     
}